# dao是伪模型
# model讲的是类
from flask_sqlalchemy import SQLAlchemy

# 创建sqlalchemy类对象
db = SQLAlchemy()


# 默认情况下：类名即为表名
class User(db.Model):
    # 声明字段(属性),默认情况下属性名与字段相同
    uid = db.Column('id',db.Integer,primary_key=True,autoincrement=True)
    number = db.Column(db.String(18),unique=True)
    name = db.Column(db.String(20),nullable=False)
    phone = db.Column(db.String(20))
    password = db.Column(db.String(20),nullable=False)

    def __str__(self):
        return "%s %s" % (self.name,self.number)

# 声明银行模型
class Tb_bank(db.Model):
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(50), unique=True)
    address = db.Column(db.String(200),nullable=False)


# 声明银行卡模型
class Card(db.Model):
    id = db.Column(db.Integer,nullable=False,primary_key=True,autoincrement=True)
    number = db.Column(db.String(20),unique=True)
    # default 属性的默认值 server_default=0  创建表时字段默认值约束（数据库查询值是0）
    money = db.Column(db.Float(2),default=0,server_default='0')
    passwd = db.Column(db.String(100))

    # 模型的关系维扩（建立）在多端
    user_id = db.Column(db.Integer,db.ForeignKey('user.id'))
    user = db.relationship(User,backref='cards')

    back_id = db.Column(db.Integer,db.ForeignKey('tb_bank.id'))
    # lazy true表示关联的数据是延迟加载，新版本默认是true,为False使用join关联查询
    tb_bank = db.relationship(Tb_bank,backref=db.backref('cards',lazy=True))

# property 属性 是函数就直接调用，是属性直接显示
# @property
# def username(self):
#     return User.query.filter(User.id==self.user_id).all()[0].name
#
# @property
# def bankname(self):
#     return Back.query.filter_by(id=self.back_id).all()[0].name